package cn.itsource.controller;
import cn.itsource.domain.BlogArticle;
import cn.itsource.query.BlogArticleQuery;
import cn.itsource.service.BlogArticleService;
import cn.itsource.util.AjaxResult;
import cn.itsource.util.UserTools;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController //@Contorller和@ResponseBody（所有的方法都返回json格式）
@RequestMapping("/blogArticle") //公共路径
public class BlogArticleController {

    /**
     * 注入Service
     */
    @Autowired
    private BlogArticleService blogArticleService;

    /**
     * 查询分页数据
     * @return
     * @RequestBody：前后台分离的项目，接受对象就得用它
     */
    @PostMapping("/pagelist")
    public AjaxResult pageList(@RequestBody BlogArticleQuery blogArticleQuery){
        //1.调用service获取到所有的用户列表数据
        PageInfo<BlogArticle> pageInfo = blogArticleService.pageList(blogArticleQuery);
        //2.通过统一对象返回数据
        return AjaxResult.Success(pageInfo);
    }
    /**
     * 新增或者修改，根据id来区分
     * @return
     * @RequestBody：前后台分离的项目，接受对象就得用它
     */
    @PostMapping("/save")
    public AjaxResult saveOrUpdate(@RequestBody BlogArticle blogArticle){

        try {
            //如果id为空就是新增  else就是修改     修改是有id 的  新增没有id
            if (blogArticle.getId() == null){
                blogArticleService.save(blogArticle);
            }else {
                blogArticleService.update(blogArticle);
            }
            //2.通过统一对象返回数据
            return AjaxResult.Success();
        } catch (Exception e) {
            //打印错误的堆栈信息
            e.printStackTrace();
            return AjaxResult.error("系统异常，联系管理员");
        }

    }

     /*
     * 删除
     */
    @DeleteMapping("/{id}")
    public AjaxResult delete(@PathVariable("id") Long id){
        try {
            BlogArticle one = blogArticleService.findOne(id);
//            获取图片地址
            String articlePic = one.getArticlePic();
            int index = articlePic.lastIndexOf("/");
            String substring = articlePic.substring(index + 1);
//            调用删除oss方法
            // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
            String endpoint = "oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
            String accessKeyId = "LTAI5tFdPf6sUHbb3V4gHa8V";
            String accessKeySecret = "7WuXzHvpmFEM3q7Ez9E49xmNn2dV5w";
// 填写Bucket名称，例如examplebucket。
            String bucketName = "lg-java";

// 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

            try {
                // 删除文件或目录。如果要删除目录，目录必须为空。
                ossClient.deleteObject(bucketName, substring);
            } catch (OSSException oe) {
                System.out.println("Error Message:" + oe.getErrorMessage());
            } catch (ClientException ce) {
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
            System.err.println("执行完毕");
            //1.调用删除数据库图片的方法
            blogArticleService.delete(id);
            //2.通过统一对象返回数据
            return AjaxResult.Success("刪除成功");
        } catch (Exception e) {
            //打印错误的堆栈信息
            e.printStackTrace();
            return AjaxResult.error("系统异常，联系管理员");
        }
    }
    /**
     * 批量删除
     */
    @PostMapping("/deleteBatch")
    public AjaxResult deleteBatches(@RequestBody BlogArticleQuery query){
        try {
            Long[] ids = query.getIds();
            for (Long id : ids) {
                blogArticleService.delete(id);
            }
            return new AjaxResult();
        } catch (Exception e) {
            //打印错误的堆栈信息
            e.printStackTrace();
            return AjaxResult.error("系统异常，联系管理员");
        }
    }
}
